package metier;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import DB.Request;
import bean.Visite;

public class VisiteMetier {

private static VisiteMetier singleton = new VisiteMetier();
	
	public static VisiteMetier getInstance(){
		return singleton;
	}
	
	public Visite save(Visite visite){
		if(visite != null){
			String query;
			if (visite.getId_visite()!= null) {
				//UPDATE
				query = "UPDATE visite SET id_utilisateur_connecte=?,type_utilisateur_connecte=?,date_visite=?,heure_connexion=?,heure_deconnexion=? WHERE id_visite="+visite.getId_visite();
			} else {
				//INSERT
				query = "INSERT INTO visite(id_utilisateur_connecte,type_utilisateur_connecte,date_visite,heure_connexion,heure_deconnexion) VALUES (?,?,?,?,?)";
			}
			List<Object> param = new ArrayList<Object>();
			param.add(visite.getUtilisateur().getId_utilisateur());
			param.add(visite.getType_utilisateur_connecte());
			param.add(visite.getDate_visite());
			param.add(visite.getHeure_connexion());
			param.add(visite.getHeure_deconnexion());
			Request.getInstance().executeUpdate(query, param);
		}
		if (visite.getId_visite() != null) {
			return getById(visite.getId_visite());
		} else {
			return getById(getLastId());
		}
	}
	
	public void delete(Visite visite){
		String query = "DELETE FROM visite WHERE id_visite=" + visite.getId_visite();
		Request.getInstance().executeUpdate(query);
	}
	
	public Visite getById(Integer id){
		Visite visite = null;
		String query = "SELECT * FROM visite WHERE id_visite=" + id;
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				visite = new Visite(id, resultat.getString("type_utilisateur_connecte"), resultat.getDate("date_visite"),resultat.getTime("heure_connexion"),resultat.getTime("heure_deconnexion"),UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur_connecte")));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return visite;
	}
	
	public List<Visite> getAll(){
		List<Visite> visites = new ArrayList<Visite>();
		String query = "SELECT * FROM visite";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				Visite visite = new Visite(resultat.getInt("id_visite"), resultat.getString("type_utilisateur_connecte"), resultat.getDate("date_visite"),resultat.getTime("heure_connexion"),resultat.getTime("heure_deconnexion"),UtilisateurMetier.getInstance().getById(resultat.getInt("id_utilisateur_connecte")));
				visites.add(visite);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return visites;
	}

	
	private Integer getLastId(){
		Integer result = null;
		String query = "SELECT max(id_visite) AS id_visite FROM visite";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				result = resultat.getInt("id_visite");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}
	
}
